# -*- coding: utf-8 -*-
module JpMailer::Mobile::Softbank

  def self.match_recipient?(recipient)
    /(.*?)<(.*?)>/ =~ recipient
    scanner.match($& ? $2 : recipient) ? true : false
  end

  # 文字コードを指定
  def self.extended(receiver)
    receiver.instance_variable_set(:@charset, 'utf-8')
    if receiver.enabled_emotion_conversion?
      receiver.instance_variable_set(:@emotion_conversion_table, Jpmobile::Emoticon::CONVERSION_TABLE_TO_SOFTBANK)
    end
    receiver.extend JpMailer::Mobile::Base
  end

  private
  def self.scanner
    /(softbank\.ne\.jp|\.vodafone\.ne\.jp|disney\.ne\.jp)\z/
  end

  public
  def enabled_emotion_conversion?
    defined? Jpmobile::Emoticon ? true : false
  end

  def convert_emotion(str, to_sjis = false)
    return str unless enabled_emotion_conversion?
    str = Jpmobile::Emoticon::unicodecr_to_external(str, @emotion_conversion_table, to_sjis)
    # SoftBank Webcode
    s = str.clone
    # 連続したエスケープコードが省略されている場合は切りはなす。
    s.gsub!(/\x1b\x24(.)(.+?)\x0f/) do |match|
      a = $1
      $2.split(//).map{|x| "\x1b\x24#{a}#{x}\x0f"}.join('')
    end
    # Webcodeを変換
    s.gsub(Jpmobile::Emoticon::SOFTBANK_WEBCODE_REGEXP) do |match|
      unicode = Jpmobile::Emoticon::SOFTBANK_WEBCODE_TO_UNICODE[match[2,2]]
      unicode ? [unicode].pack('U') : match
    end
  end

end
